// Package controllers 包含应用程序的控制器逻辑。
// 本文件用于处理文章点赞相关的 HTTP 请求。
package controllers

import (
	"exchangeapp/global" // 导入全局变量包，用于访问 Redis 客户端
	"net/http"           // 提供 HTTP 请求和响应的相关功能

	"github.com/gin-gonic/gin"  // Gin 是一个轻量级的 Web 框架
	"github.com/go-redis/redis" // Redis 客户端库
)

// LikeArticle 处理文章点赞的逻辑
// @Summary 点赞文章
// @Description 根据文章 ID 增加点赞数
// @Tags 点赞管理
// @Param id path string true "文章 ID"
// @Success 200 {object} gin.H "点赞成功消息"
// @Failure 500 {object} gin.H "服务器错误"
// @Router /articles/{id}/like [post]
func LikeArticle(ctx *gin.Context) {
	// 获取文章 ID 参数(/articles/:id/like得到)
	articleID := ctx.Param("id")

	// 构造 Redis 中存储点赞数的键
	likeKey := "article:" + articleID + ":likes"

	// 使用 Redis 的 Incr 方法增加点赞数
	if err := global.RedisDB.Incr(likeKey).Err(); err != nil {
		// 如果操作失败，返回 500 错误
		ctx.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
		return
	}

	// 返回成功消息
	ctx.JSON(http.StatusOK, gin.H{"message": "Successfully liked the article"})
}

// GetArticleLikes 获取文章的点赞数
// @Summary 获取文章点赞数
// @Description 根据文章 ID 获取点赞数
// @Tags 点赞管理
// @Param id path string true "文章 ID"
// @Success 200 {object} gin.H "点赞数"
// @Failure 500 {object} gin.H "服务器错误"
// @Router /articles/{id}/likes [get]
func GetArticleLikes(ctx *gin.Context) {
	// 获取文章 ID 参数
	articleID := ctx.Param("id")

	// 构造 Redis 中存储点赞数的键
	likeKey := "article:" + articleID + ":likes"

	// 从 Redis 中获取点赞数
	likes, err := global.RedisDB.Get(likeKey).Result()

	if err == redis.Nil {
		// 如果键不存在，设置点赞数为 0
		likes = "0"
	} else if err != nil {
		// 如果发生其他错误，返回 500 错误
		ctx.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
		return
	}

	// 返回点赞数
	ctx.JSON(http.StatusOK, gin.H{"likes": likes})
}
